All: Image
# 执行make All的时候，会直接生成Image文件
.PHONY=clean run-qemu
# .PHONY表示伪目标，这里写的东西都不代表文件名，
# 我们用的clean和run-qemu都仅仅是操作
bootsect:bootsect.s ld_boot.ld
	- @as --32 bootsect.s -o bootsect.o
	- @ld -T ld_boot.ld bootsect.o -o bootsect
	- @objdump -D bootsect > bootsect.dis
	- @objcopy -O binary -j .text bootsect
# 冒号后面跟着的是生成bootsect所需的基础文件，
# 这里需要bootsect.s和ld_boot.ld
# 生成bootsect文件，第一句是用汇编器把.s文件汇编到.o文件
# 第二句是用链接脚本将.o文件转化到elf可执行文件
# 第三句是用objcopy提取bootsect中.text段的内容，再覆盖bootsect文件
# 这样bootsect就是标准的可以被识别和运行的引导程序了
Image:bootsect
	- @dd if=bootsect of=Image bs=512 count=1
	- @echo "Image built done"
# dd可以制作一个镜像，if表示输入文件，of表示输出到文件，bs表示一块的大小
# bs=512表示一块有512字节大小，count=1表示生成1块
clean:
	- @rm -f *.o *.dis bootsect Image
# 清理文件
run-qemu:Image
	- @qemu-system-i386 -boot a -fda Image
# -fda表示把Image当做虚拟软盘载入qemu虚拟机